package cn.h8k.hj212.entity;

import java.util.Objects;

/**
 * HJ212协议CP数据项实体类
 * 表示单个CP数据项，包含名称和值
 */
public class Hj212CpItem {
    
    /**
     * 数据项名称
     */
    private String name;
    
    /**
     * 数据项值
     */
    private Object value;
    
    /**
     * 默认构造函数
     */
    public Hj212CpItem() {
    }
    
    /**
     * 构造函数
     * @param name 数据项名称
     * @param value 数据项值
     */
    public Hj212CpItem(String name, Object value) {
        this.name = name;
        this.value = value;
    }
    
    public String getName() {
        return name;
    }
    
    public void setName(String name) {
        this.name = name;
    }
    
    public Object getValue() {
        return value;
    }
    
    public void setValue(Object value) {
        this.value = value;
    }
    
    /**
     * 获取字符串值
     * @return 字符串值
     */
    public String getStringValue() {
        return value != null ? value.toString() : null;
    }
    
    /**
     * 获取数值
     * @return 数值，如果无法转换则返回null
     */
    public Number getNumericValue() {
        if (value instanceof Number) {
            return (Number) value;
        }
        if (value instanceof String) {
            try {
                String str = (String) value;
                if (str.contains(".")) {
                    return Double.parseDouble(str);
                } else {
                    return Long.parseLong(str);
                }
            } catch (NumberFormatException e) {
                return null;
            }
        }
        return null;
    }
    
    /**
     * 获取双精度浮点数值
     * @return 双精度浮点数值，如果无法转换则返回null
     */
    public Double getDoubleValue() {
        Number num = getNumericValue();
        return num != null ? num.doubleValue() : null;
    }
    
    /**
     * 获取整数值
     * @return 整数值，如果无法转换则返回null
     */
    public Integer getIntegerValue() {
        Number num = getNumericValue();
        return num != null ? num.intValue() : null;
    }
    
    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Hj212CpItem that = (Hj212CpItem) o;
        return Objects.equals(name, that.name) &&
               Objects.equals(value, that.value);
    }
    
    @Override
    public int hashCode() {
        return Objects.hash(name, value);
    }
    
    @Override
    public String toString() {
        return "Hj212CpItem{" +
                "name='" + name + '\'' +
                ", value=" + value +
                '}';
    }
} 